using System;
using System.Collections.Generic;
using System.Text;

namespace WindowsApplicationLZ77
{
    class Nodo
    {
        private Nodo nodoIzq;
        private Nodo nodoDer;
        private Dato _dato;
        private TipoNodo _tipo;
        private Nodo _padre = null;
        private bool _yaVisitado;

        public bool YaVisitado
        {
            get { return _yaVisitado; }
            set { _yaVisitado = value; }
        }

        internal Nodo Padre
        {
            get { return _padre; }
            set { _padre = value; }
        }

        internal TipoNodo Tipo
        {
            get { return _tipo; }
            set { _tipo = value; }
        }

        public enum TipoNodo
        {
            NODO_RAIZ,
            NODO_IZQUIERDO,
            NODO_DERECHO
        }



        public char Caracter
        {
            get { return Dato.Caracter; }
        }

        public int GetCantidadHijos()
        {
            if( this.NodoIzq == null && this.NodoDer == null )
                return 0;
            else
                return 2;
        }

        public Nodo() 
        {
            nodoDer = null;
            nodoIzq = null;
            _dato   = null;
            _padre  = null;
            _tipo   = TipoNodo.NODO_RAIZ;
            _yaVisitado = false;


        }

        public Nodo(Dato dato, Nodo padre,TipoNodo tipo)
        {
            _dato = dato;
            _tipo = tipo;
        }

        #region GET - SET
        public int Peso
        {
            get { return _dato.Cantidad; }
            set { _dato.Cantidad = value; }
        }

        internal Nodo NodoIzq
        {
            get { return nodoIzq; }
            set { nodoIzq = value; }
        }

        internal Nodo NodoDer
        {
            get { return nodoDer; }
            set { nodoDer = value; }
        }

        public Dato Dato
        {
            get { return _dato; }
            set { _dato = value; }
        }


        #endregion


    }
}
